/**
 * Created by zhourh on 2018/6/12.
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 双指针
 *
 */
public class MoveZeroes {

    public static String integerArrayToString(int[] nums, int length) {
        if (length == 0) {
            return "[]";
        }

        String result = "";
        for(int index = 0; index < length; index++) {
            int number = nums[index];
            result += Integer.toString(number) + ", ";
        }
        return "[" + result.substring(0, result.length() - 2) + "]";
    }

    public static String integerArrayToString(int[] nums) {
        return integerArrayToString(nums, nums.length);
    }

    public static void main(String[] args) {
        int[] array = new int[]{0,1,0,3,12};
        new MoveZeroes().moveZeroes(array);
        System.out.println(integerArrayToString(array));
    }

    public void moveZeroes(int[] nums) {
        if (nums == null || nums.length == 0) {
            return;
        }

        // 先找到第一个0元素
        for (int zeroIndex = 0, nonZeroIndex = 0; zeroIndex < nums.length - 1 && nonZeroIndex < nums.length;) {
            if (nums[zeroIndex] != 0) {
                // 0元素坐标未找到 未找到
                zeroIndex++;
                continue;
            }

            if (nums[nonZeroIndex] == 0 || nonZeroIndex <= zeroIndex) {
                // 非0元素坐标未找到
                nonZeroIndex++;
                continue;
            }

            // 交换位置
            int t = nums[zeroIndex];
            nums[zeroIndex] = nums[nonZeroIndex];
            nums[nonZeroIndex] = t;

            zeroIndex++;
            nonZeroIndex++;

        }


    }
}
